package com.zzyl.nursing.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzyl.common.core.page.TableDataInfo;
import com.zzyl.nursing.domain.Reservation;
import com.zzyl.nursing.dto.ReservationDto;
import com.zzyl.nursing.dto.ReservationPageDto;
import com.zzyl.nursing.vo.ReservationCountVo;

import java.util.List;

/**
 * 预约信息Service接口
 *
 * @author alexis
 * @date 2025-06-04
 */
public interface IReservationService extends IService<Reservation> {

    /**
     * 新增预约信息
     *
     * @param reservation 预约信息
     */
    void insertReservation(Reservation reservation);

    /**
     * 取消预约
     *
     * @param id 预约信息ID
     */
    void cancel(Long id);

    /**
     * 查询取消预约数量
     *
     * @return 取消预约数量
     */
    Long getCancelledReservationCount();

    /**
     * 查询预约剩余次数
     *
     * @return 预约剩余次数
     */
    List<ReservationCountVo> countByTime(Long time);

    /**
     * 分页查询预约信息列表
     *
     * @return 预约信息集合
     */
    TableDataInfo<Reservation> selectPage(ReservationDto reservationDto);

    /**
     * 定时更新预约状态
     */
    void updateReservationStatus();

    /**
     * 查询预约信息列表
     *
     * @return 预约信息集合
     */
    List<Reservation> selectReservationList(ReservationPageDto reservationDto);

    /**
     * 删除预约信息
     *
     * @param id 预约信息ID
     */
    void removeReservationById(Long id);

    /**
     * 定时清理超过一周的已完成的预约信息
     */
    void clearReservation();

    /**
     * 更新预约信息
     *
     * @param reservation 预约信息
     */
    void updateReservationById(Reservation reservation);
}
